home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / ext2fs / ext2_io.h < prev    next >
C/C++ Source or Header  |  2006-04-25  |  3KB  |  109 lines

  1. /*
  2.  * io.h --- the I/O manager abstraction
  3.  * 
  4.  * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
  5.  *
  6.  * %Begin-Header%
  7.  * This file may be redistributed under the terms of the GNU Public
  8.  * License.
  9.  * %End-Header%
  10.  */
  11.  
  12. #ifndef _EXT2FS_EXT2_IO_H
  13. #define _EXT2FS_EXT2_IO_H
  14.  
  15. /*
  16.  * ext2_loff_t is defined here since unix_io.c needs it.
  17.  */
  18. #if defined(__GNUC__) || defined(HAS_LONG_LONG)
  19. typedef long long    ext2_loff_t;
  20. #else
  21. typedef long        ext2_loff_t;
  22. #endif
  23.  
  24. /* llseek.c */
  25. ext2_loff_t ext2fs_llseek (int, ext2_loff_t, int);
  26.  
  27. typedef struct struct_io_manager *io_manager;
  28. typedef struct struct_io_channel *io_channel;
  29.  
  30. #define CHANNEL_FLAGS_WRITETHROUGH    0x01
  31.  
  32. struct struct_io_channel {
  33.     errcode_t    magic;
  34.     io_manager    manager;
  35.     char        *name;
  36.     int        block_size;
  37.     errcode_t    (*read_error)(io_channel channel,
  38.                       unsigned long block,
  39.                       int count,
  40.                       void *data,
  41.                       size_t size,
  42.                       int actual_bytes_read,
  43.                       errcode_t    error);
  44.     errcode_t    (*write_error)(io_channel channel,
  45.                        unsigned long block,
  46.                        int count,
  47.                        const void *data,
  48.                        size_t size,
  49.                        int actual_bytes_written,
  50.                        errcode_t error);
  51.     int        refcount;
  52.     int        flags;
  53.     int        reserved[14];
  54.     void        *private_data;
  55.     void        *app_data;
  56. };
  57.  
  58. struct struct_io_manager {
  59.     errcode_t magic;
  60.     const char *name;
  61.     errcode_t (*open)(const char *name, int flags, io_channel *channel);
  62.     errcode_t (*close)(io_channel channel);
  63.     errcode_t (*set_blksize)(io_channel channel, int blksize);
  64.     errcode_t (*read_blk)(io_channel channel, unsigned long block,
  65.                   int count, void *data);
  66.     errcode_t (*write_blk)(io_channel channel, unsigned long block,
  67.                    int count, const void *data);
  68.     errcode_t (*flush)(io_channel channel);
  69.     errcode_t (*write_byte)(io_channel channel, unsigned long offset,
  70.                 int count, const void *data);
  71.     errcode_t (*set_option)(io_channel channel, const char *option, 
  72.                 const char *arg);
  73.     int        reserved[14];
  74. };
  75.  
  76. #define IO_FLAG_RW    1
  77.  
  78. /*
  79.  * Convenience functions....
  80.  */
  81. #define io_channel_close(c)         ((c)->manager->close((c)))
  82. #define io_channel_set_blksize(c,s)    ((c)->manager->set_blksize((c),s))
  83. #define io_channel_read_blk(c,b,n,d)    ((c)->manager->read_blk((c),b,n,d))
  84. #define io_channel_write_blk(c,b,n,d)    ((c)->manager->write_blk((c),b,n,d))
  85. #define io_channel_flush(c)         ((c)->manager->flush((c)))
  86. #define io_channel_bumpcount(c)        ((c)->refcount++)
  87.     
  88. /* io_manager.c */
  89. extern errcode_t io_channel_set_options(io_channel channel, 
  90.                     const char *options);
  91. extern errcode_t io_channel_write_byte(io_channel channel, 
  92.                        unsigned long offset,
  93.                        int count, const void *data);
  94.  
  95. /* unix_io.c */
  96. extern io_manager unix_io_manager;
  97.  
  98. /* test_io.c */
  99. extern io_manager test_io_manager, test_io_backing_manager;
  100. extern void (*test_io_cb_read_blk)
  101.     (unsigned long block, int count, errcode_t err);
  102. extern void (*test_io_cb_write_blk)
  103.     (unsigned long block, int count, errcode_t err);
  104. extern void (*test_io_cb_set_blksize)
  105.     (int blksize, errcode_t err);
  106.  
  107. #endif /* _EXT2FS_EXT2_IO_H */
  108.     
  109.